package main

import (
	"fmt"
	"time"
)

/*
基于 Channel 编写一个简单的单线程生产者消费者模型：

队列：
队列长度 10，队列元素类型为 int
生产者：
每 1 秒往队列中放入一个类型为 int 的元素，队列满时生产者可以阻塞
消费者：
每一秒从队列中获取一个元素并打印，队列为空时消费者阻塞
*/
func main() {
	//队列长度 10，队列元素类型为 int
	ch := make(chan int, 10)

	go producer(ch)
	go consumer(ch)

	time.Sleep(time.Minute)
}

/*
生产者
*/
func producer(ch chan int) {
	//每 1 秒往队列中放入一个类型为 int 的元素，队列满时生产者可以阻塞
	for _ = range time.NewTicker(time.Second).C {
		ch <- time.Now().Second()
	}
}

/*
*
消费者
*/
func consumer(ch chan int) {
	//每一秒从队列中获取一个元素并打印，队列为空时消费者阻塞
	for _ = range time.NewTicker(time.Second).C {
		fmt.Println("consume :", <-ch)
	}
}
